package metier.jdbc.grade;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.swing.JOptionPane;

import metier.Eleve;
import metier.Promotion;
import configuration.MessageAppli;

public class PromotionJdbc {

	/**
	 * Retourne la liste complete des promotions d'un eleve.
	 * @param Connection connexion à la base
	 * @return <code>ArrayList<Stage><code> La liste des grades.
	 */
	public static ArrayList<Promotion> getHistoPromotion(Connection c, int idEleve) {
		ArrayList<Promotion> lPromo = new ArrayList<Promotion>();
		// préparer la requete sql 
		try {
			PreparedStatement ps=c.prepareStatement("SELECT * FROM promotion WHERE ideleve = " + idEleve);
			ResultSet res = ps.executeQuery();
			while(res.next()){
				lPromo.add(new Promotion(res.getInt("ideleve"), res.getInt("idGrade"),
						res.getDate("datepromo")));
			}
			ps.close();
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, MessageAppli.MSG_BDD_ERREUR_REQUETE,
					MessageAppli.MSG_BDD_TITRE_ERREUR, JOptionPane.ERROR_MESSAGE);
		}
		return lPromo;
	}
	
	/**
	 * Ajout d'une promotion d'un eleve.
	 * @param Connection connexion à la base
	 * @param Eleve L'eleve a inserer
	 * @return boolean
	 */
	public static boolean ajouter(Connection c, Promotion promotion) {
		// préparer la requete sql 
		// retourne un entier égal à 1 
		//si l’insertion en base de données  a été réalisée
		int res = 0;
		try {
			PreparedStatement ps=c.prepareStatement("INSERT INTO promotion (ideleve, idgrade, datepromo) VALUES (?,?,?) ");
			//affecter les values correspondant aux colonnes
			ps.setInt(1, promotion.getIdEleve());
			ps.setInt(2, promotion.getIdGrade());
			ps.setDate(3, new java.sql.Date(promotion.getDatePromo().getTime()));
			res = ps.executeUpdate();
			ps.close();
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, MessageAppli.MSG_BDD_ERREUR_REQUETE,
					MessageAppli.MSG_BDD_TITRE_ERREUR, JOptionPane.ERROR_MESSAGE);
		}
		return res==1;
	}
	
	/**
	 * Recherche d'une promotion d'un grade particulieur
	 * @param Connection connexion à la base
	 * @param Eleve L'eleve a inserer
	 * @return boolean
	 */
	public static Promotion rechercherPromoGrade(Connection c, Promotion promo) {
		Promotion promotion = null;
		try {
			PreparedStatement ps=c.prepareStatement("SELECT * FROM promotion " +
					"WHERE ideleve = " + promo.getIdEleve() +
					" AND idGrade = " + promo.getIdGrade());
			ResultSet res = ps.executeQuery();
			while(res.next()){
				promotion = new Promotion(res.getInt("ideleve"), res.getInt("idGrade"),
						res.getDate("datepromo"));
			}
			ps.close();
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, MessageAppli.MSG_BDD_ERREUR_REQUETE,
					MessageAppli.MSG_BDD_TITRE_ERREUR, JOptionPane.ERROR_MESSAGE);
		}
		return promotion;
	}
	
	/**
	 * Permet de supprimer de l'historique d'un eleve.
	 * @param c
	 * @param eleve
	 * @return
	 */
	public static boolean supprimerHistorique(Connection c, Eleve eleve) {
		try {
			PreparedStatement ps=c.prepareStatement("DELETE FROM promotion WHERE idEleve = " + eleve.getIdEleve());
			ps.executeUpdate();
			ps.close();
			return true;
		} catch (SQLException e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, MessageAppli.MSG_BDD_ERREUR_REQUETE,
					MessageAppli.MSG_BDD_TITRE_ERREUR, JOptionPane.ERROR_MESSAGE);
		}
		return false;
	}
}
